/*****************************************
 *	VentanaDiseniador.cpp
 * 	Autor: Martin Lucero
 ****************************************/

#include "VentanaDiseniador.h"

#include <iostream>

#define ANCHO_VENTANA 950
#define ALTO_VENTANA 600

VentanaDiseniador::VentanaDiseniador() {
	/* Algunas propiedades de la ventana */
	set_title("Cerditos Furiosos - Diseñador");
	set_default_size(ANCHO_VENTANA, ALTO_VENTANA);
	set_resizable(false);
	set_border_width(5);
	set_default_icon_from_file(RUTA_ICONO_VENTANA);
	set_position(Gtk::WIN_POS_CENTER);

	/* Esqueleto de la ventana */
	d_Box_vprincipal = new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10);
	d_Box_hprincipal = new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 15);
	d_MenuBar_menu = new BarraMenu;
	add_accel_group(d_MenuBar_menu->getUIManager()->get_accel_group());
	d_Box_vprincipal->pack_start(*d_MenuBar_menu, Gtk::PACK_SHRINK);
	d_Box_vprincipal->pack_end(*d_Box_hprincipal, Gtk::PACK_SHRINK);
	add(*d_Box_vprincipal);

	/* Contenedor Izquierdo = Mundo + Navegador + Nivel */
	d_Box_vmundonivel = new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10);
	d_Grid_mundo = new PropiedadesMundo;
	d_Frame_mundo.add(*d_Grid_mundo);
	d_TreeView_navegadormundo = new VistaNavegador;
	d_Box_hprincipal->pack_start(*d_Box_vmundonivel, Gtk::PACK_SHRINK);
	d_Box_vmundonivel->pack_start(d_Frame_mundo, Gtk::PACK_SHRINK);
	d_ScrolledWindow_navegadormundo.add(*d_TreeView_navegadormundo);
	d_ScrolledWindow_navegadormundo.set_size_request(150, 400);
	d_Box_vmundonivel->pack_start(d_ScrolledWindow_navegadormundo,
			Gtk::PACK_SHRINK);
	d_Frame_nivel.add(*(d_Grid_mundo->getPropiedadesNivelActual()));
	d_Box_vmundonivel->pack_end(d_Frame_nivel, Gtk::PACK_SHRINK);

	/* Contenedor Derecho = Lienzo + ToolPalette */
	d_Box_vlienzopaleta = new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10);
	d_Box_hprincipal->set_size_request(1030, -1);
	d_Box_hprincipal->pack_end(*d_Box_vlienzopaleta, Gtk::PACK_EXPAND_WIDGET);
	d_ScrolledWindow_lienzo.add(
			(*d_Grid_mundo->getPropiedadesNivelActual()->getLienzoNivel()));
	d_Box_vlienzopaleta->pack_start(d_ScrolledWindow_lienzo,
			Gtk::PACK_EXPAND_WIDGET);
	d_ScrolledWindow_paleta.set_size_request(-1, 100);
	d_ScrolledWindow_paleta.add(d_ToolPalette_paleta);
	d_Box_vlienzopaleta->pack_end(d_ScrolledWindow_paleta,
			Gtk::PACK_SHRINK);

	d_ToolPalette_paleta.add_drag_dest(
			*(d_Grid_mundo->getPropiedadesNivelActual()->getLienzoNivel()),
			Gtk::DEST_DEFAULT_HIGHLIGHT, Gtk::TOOL_PALETTE_DRAG_ITEMS,
			Gdk::ACTION_COPY);

	show_all_children();
}

PropiedadesMundo* VentanaDiseniador::getPropiedadesMundoActual() const {
	return d_Grid_mundo;
}

VistaNavegador* VentanaDiseniador::getVistaNavegador() const {
	return d_TreeView_navegadormundo;
}

void VentanaDiseniador::actualizarVistaPropiedadesNivel() {
	std::cout << "actualizando vista" << std::endl;
	
	PropiedadesNivel *nivelNuevo = d_Grid_mundo->getPropiedadesNivelActual();
	d_Frame_nivel.remove();
	d_Frame_nivel.add(*nivelNuevo);

	d_ScrolledWindow_lienzo.remove();
	std::cout << "lienzo nivel removido" << std::endl;
	
	d_ScrolledWindow_lienzo.add(*(nivelNuevo->getLienzoNivel()));
	
	std::cout << "lienzo nivel agregado" << std::endl;

	d_ToolPalette_paleta.add_drag_dest(*(nivelNuevo->getLienzoNivel()),
			Gtk::DEST_DEFAULT_HIGHLIGHT, Gtk::TOOL_PALETTE_DRAG_ITEMS,
			Gdk::ACTION_COPY);
	
	show_all_children();
	
	std::cout << "vista actualizada" << std::endl;
}

VentanaDiseniador::~VentanaDiseniador() {
	delete d_TreeView_navegadormundo;
	delete d_Grid_mundo;
	delete d_MenuBar_menu;
	delete d_Box_vlienzopaleta;
	delete d_Box_vmundonivel;
	delete d_Box_hprincipal;
	delete d_Box_vprincipal;
}

//void VentanaDiseniador::guardar(Mundo &mundo) {
//	d_Grid_mundo->guardar(mundo);
//}
//
//void VentanaDiseniador::cargar(const Mundo &mundo) { }